{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from openai import OpenAI\n",
    "\n",
    "client = OpenAI(\n",
    "    #api_key=os.getenv(\"DASHSCOPE_API_KEY\"),\n",
    "    api_key=\"ollama\",\n",
    "    base_url=\"http://192.168.20.43:11434/v1\"\n",
    ")\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "[['地区', '住宿费标准(元/天)'], ['北京、上海、广州、深圳', '350'], ['各省省会城市及直辖市(天津、重庆) 及计划单列市(大连、青岛、宁波、厦 门 )', '250'], ['其他城市', '200']]\n"
     ]
    }
   ],
   "source": [
    "from docx import Document\n",
    "\n",
    "def read_docx_tables(file_path):\n",
    "    document = Document(file_path)\n",
    "    tables_all = []\n",
    "\n",
    "    # 遍历文档中的所有表格\n",
    "    for table in document.tables:    \n",
    "        table_data = []\n",
    "        # 遍历表格的每一行,把每一行作为一个数组加入到table_data中，构成一个元组。\n",
    "        for row in table.rows:\n",
    "            row_data = [cell.text.strip() for cell in row.cells]\n",
    "            table_data.append(row_data)\n",
    "        tables_all.append(table_data)\n",
    "        #print(tables_all)\n",
    "    return tables_all\n",
    "\n",
    "file_path = 'Data/财务报销办法6.0.docx'\n",
    "tables = read_docx_tables(file_path)\n",
    "print()\n",
    "print(tables[4])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "### 标题：住宿标准\n",
      "\n",
      "### 表头解释与数据内容描述\n",
      "\n",
      "此表格提供了中国不同地区的住宿费用标准，详细信息如下表所示。每一项对应中国的不同地区及其相应的住宿费标准（以元/天为单位）。阅读图表时，可快速分辨出不同城市区域的住宿成本差异。\n",
      "#### 1. '地区'\n",
      "   - **北京、上海、广州和深圳**：表示此表格中指出的中国一线城市。这些城市的经济发展水平相对较高，因此此类地区的住宿费用标准定在每晚350元。\n",
      "   - **各省省会城市及直辖市（天津、重庆）及计划单列市（大连、青岛、宁波、厦门）**：包括了全国主要省份的城市与特定级别较高的城市区域。这些城市的住宿费用标准为每晚250元，低于一线城市但高于非直接提及的其他地区。\n",
      "   - **其他城市**：针对中国其余地域范围内的城市，此表格将每晚的住宿成本定在200元，反映了较不发达或次要地区的住宿价格水平。\n",
      "\n",
      "### 图例（Caption）：\n",
      "- 此图展示了中国的不同地区依据经济发展、规模和地理位置差异所设定的每日住宿费用标准，提供了从一线城市到二三线及以下城市的住宿成本概览。这些标准基于过往数据综合评估得出，旨在为规划者和旅行者提供参考。\n",
      "\n",
      "通过上述内容，我们可以清晰地了解到各地区的住宿费用区间，方便有相关的人员在做决策时进行对比和选择。\n"
     ]
    }
   ],
   "source": [
    "def llm_summary_table(query):\n",
    "    prompt = \"\"\"\n",
    "    # OBJECTIVE #\n",
    "    任务：分析用户给出的表格，并详细描述其内容，以便让没看过表格的人也能清楚地知道表格中的内容。\n",
    "    你需要遵循以下要求：\n",
    "    1.明确标题和表头：在描述之前，首先需要明确表格的标题和每列的表头。这些信息可以帮助读者快速理解表格的主要内容和结构。\n",
    "    2.详细解释各列和行：对于每一列和行的数据，提供详细的解释。例如，如果某列是“销售额”，则说明它代表的是某个时间段内的总销售额，并且单位是什么（如美元、欧元等）\n",
    "    3.突出重要数据：强调关键数据点，使读者能够迅速识别出重要的信息。\n",
    "    4.图例（Caption）：图例为读者提供了图表的简短描述，包括图表的标题和必要的解释，帮助读者理解图表所展示的信息。\n",
    "    \n",
    "    # TONE #\n",
    "    有条理、精炼、准确的语言。\n",
    "    \"\"\"\n",
    "    completion = client.chat.completions.create(\n",
    "        model=\"qwen2-7b-instruct\",\n",
    "        messages=[{'role': 'system', 'content': prompt},\n",
    "                  {'role': 'user', 'content': query}],\n",
    "        )\n",
    "    return completion.choices[0].message.content\n",
    "\n",
    "text = str(tables[4])               #只取doc中第五张表格作为测试\n",
    "text_before = \"2.2.3  住宿标准：\"    #手动补了一下表格前面的内容，这个有助于让大模型了解表格是关于什么的。实际实现要通过代码。\n",
    "summary_text = llm_summary_table(text_before+text) #注意这里会拼成user_query，usery_query会和system_prompt一起扔给大模型。\n",
    "print(summary_text)\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
